package com.apigen.platform.service;

import com.apigen.platform.entity.GenTable;
import com.baomidou.mybatisplus.core.metadata.IPage;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import com.baomidou.mybatisplus.extension.service.IService;

import java.util.List;

/**
 * 数据表管理服务接口
 *
 * @author API Generator
 * @since 2024-09-24
 */
public interface IGenTableService extends IService<GenTable> {

    /**
     * 根据表名查询表信息
     *
     * @param tableName 表名
     * @param projectId 项目ID
     * @return 表信息
     */
    GenTable getByTableName(String tableName, Long projectId);

    /**
     * 分页查询表列表
     *
     * @param page 分页参数
     * @param tableName 表名（模糊查询）
     * @param tableComment 表描述（模糊查询）
     * @param projectId 项目ID
     * @param creatorId 创建者ID
     * @return 表列表
     */
    IPage<GenTable> getTablePage(Page<GenTable> page, String tableName, String tableComment, Long projectId, Long creatorId);

    /**
     * 根据项目ID查询表列表
     *
     * @param projectId 项目ID
     * @return 表列表
     */
    List<GenTable> getTablesByProjectId(Long projectId);

    /**
     * 根据创建者ID查询表列表
     *
     * @param creatorId 创建者ID
     * @return 表列表
     */
    List<GenTable> getTablesByCreatorId(Long creatorId);

    /**
     * 创建数据表
     *
     * @param table 表信息
     * @return 创建结果
     */
    boolean createTable(GenTable table);

    /**
     * 更新表信息
     *
     * @param table 表信息
     * @return 更新结果
     */
    boolean updateTable(GenTable table);

    /**
     * 删除数据表
     *
     * @param tableId 表ID
     * @return 删除结果
     */
    boolean deleteTable(Long tableId);

    /**
     * 批量删除数据表
     *
     * @param tableIds 表ID列表
     * @return 删除结果
     */
    boolean deleteTables(List<Long> tableIds);

    /**
     * 从SQL导入表结构
     *
     * @param sql SQL语句
     * @param projectId 项目ID
     * @param creatorId 创建者ID
     * @return 导入结果
     */
    boolean importFromSql(String sql, Long projectId, Long creatorId);

    /**
     * 导出表结构为SQL
     *
     * @param tableId 表ID
     * @return SQL语句
     */
    String exportToSql(Long tableId);

    /**
     * 批量导出表结构为SQL
     *
     * @param tableIds 表ID列表
     * @return SQL语句
     */
    String exportToSql(List<Long> tableIds);

    /**
     * 检查表名是否存在
     *
     * @param tableName 表名
     * @param projectId 项目ID
     * @param excludeTableId 排除的表ID
     * @return 是否存在
     */
    boolean existsTableName(String tableName, Long projectId, Long excludeTableId);

    /**
     * 统计表数量
     *
     * @param projectId 项目ID
     * @return 表数量
     */
    int countTablesByProjectId(Long projectId);

    /**
     * 复制表结构
     *
     * @param sourceTableId 源表ID
     * @param newTableName 新表名
     * @param newTableComment 新表描述
     * @param projectId 项目ID
     * @param creatorId 创建者ID
     * @return 复制结果
     */
    boolean copyTable(Long sourceTableId, String newTableName, String newTableComment, Long projectId, Long creatorId);
}
